package com.cloudcc.ccTool;

/**source_begin**/
/*
 * @Author: Jarry
 * @Date:2024-04-09
 **/

import java.math.BigDecimal;
import java.security.SecureRandom;
import java.util.List;
import java.util.Random;
import java.util.Set;

public class StringUtil{


    //判断字符串是否为空，空返回true，不为空返回false
    public static boolean isEmpty(String value){

        boolean isEmpty = false;

        if(value==null||"".equals(value)||"null".equals(value)||"".equals(value.trim())){
            isEmpty = true;

        }else{
            isEmpty = false;
        }
        return isEmpty;
    }
    public static boolean isNotEmpty(String value){
        return !isEmpty(value);
    }
    //传入对象是否为空，空返回true，不为空返回false
    public  static boolean isEmpty(Object value){

        boolean isEmpty = false;

        if(value==null||"".equals(value)||"null".equals(value.toString())||"".equals(value.toString().trim())){
            isEmpty = true;

        }else{
            isEmpty = false;
        }
        return isEmpty;
    }
    public static boolean isNotEmpty(Object value){
        return !isEmpty(value);
    }
    //字符串NUll处理，如果为NUll，范围空支付穿
    public  static String str(String value){
        String tmp="";
        if(!isEmpty(value)){
            tmp=value+"";
        }
        return tmp;

    }
    //objectNUll处理，如果为NUll，范围空支付穿
    public  static String str(Object value){
        String tmp="";
        if(!isEmpty(value)){
            tmp=value+"";
        }
        return tmp;

    }

    public static String StringIntercept(String values) {
        return values.substring(0, Math.min(values.length(), 32000));
    }


    /**
     * 生成一个指定长度的随机码。
     *
     * @param maxnum 随机码的长度。
     * @return 生成的随机码字符串。
     *
     * 该方法通过SecureRandom生成安全随机数，随机码由数字、大写字母和小写字母组成，
     * 每位随机码的类型由0-2的随机数决定，0代表数字，1代表大写字母，2代表小写字母。
     * 这样生成的随机码更难以预测，提高了随机性的安全性。
     */
    public static String getGUID(int maxnum) {
        StringBuilder uid = new StringBuilder();
        // 使用SecureRandom以提高随机性的安全性
        //产生 maxnum 位的强随机数
        Random rd = new SecureRandom();
        for (int i = 0; i < maxnum; i++) {
            // 生成0-2之间的随机数，决定随机码的类型
            //产生0-2的3位随机数
            int type = rd.nextInt(3);
            // 根据随机数的类型生成相应的随机码字符，并追加到StringBuilder中
            switch (type) {
                case 0:
                    // 生成0-9之间的随机数
                    //0-9的随机数
                    uid.append(rd.nextInt(10));
                    break;
                case 1:
                    // 生成大写字母A-Z之间的随机数
                    //ASCII在65-90之间为大写,获取大写随机
                    uid.append((char) (rd.nextInt(25) + 65));
                    break;
                case 2:
                    // 生成小写字母a-z之间的随机数
                    //ASCII在97-122之间为小写，获取小写随机
                    uid.append((char) (rd.nextInt(25) + 97));
                    break;
                default:
                    break;
            }
        }
          return uid.toString();
    }


    //objectNUll处理，如果为NUll，范围空支付穿
    public  static boolean str2b(Object value){
        if(value==null){return false;}
        return Boolean.parseBoolean(str(value));

    }

    //objectNUll处理，如果为NUll，返回0
    public  static BigDecimal str2bg0(Object value){
        BigDecimal val = new BigDecimal(0);
        try{
            String strval = str(value).trim();
            if(strval.endsWith(".0")){
                strval = strval.replace(".0","");
            }
            val = new BigDecimal(strval);
        }catch (Exception e){
            val = new BigDecimal(0);
        }

        return val;

    }

    //objectNUll处理，如果为NUll或0的时候返回1，防止除法获取到0抛出异常
    public  static BigDecimal str2bg1(Object value){
        BigDecimal val = new BigDecimal(1);
        try{
            String strval = str(value).trim();
            if(strval.endsWith(".0")){
                strval = strval.replace(".0","");
            }
            val = new BigDecimal(strval).compareTo(new BigDecimal(0))==0 ? new BigDecimal(1):new BigDecimal(strval);
        }catch (Exception e){
            val = new BigDecimal(1);
        }

        return val;

    }

    //objectNUll处理，转换失败，返回null
    public  static BigDecimal str2bg(Object value){
        BigDecimal val =null;
        try{
            val = new BigDecimal(str(value));
        }catch (Exception e){
            val = null;
        }

        return val;

    }
    //objectNUll处理，如果为NUll，范围空支付穿
    public  static String str(Object value,String devVal){
        String tmp=devVal;
        if(!isEmpty(value)){
            tmp=value+"";
        }
        return tmp;

    }

    //字符串转Int
    public  static int parseInt(Object value){
        String tmp = str(value);
        try{
            return Integer.parseInt(tmp);
        }catch(Exception e){
            return 0;
        }

    }

    //根据字符串，给字符串设置颜色
    //@param devaultVaue 原字符串
    //@param backgroundcolor: 要设置的背景颜色
    //@param fontColor:要设置字体的颜色；
    //@return: 返回颜色标签
    public  static String getColorValue(String defaultValue,String backgroundcolor,String fontColor){
        String colorValue="";
        if(isEmpty(backgroundcolor)){
            backgroundcolor ="#e8eaed";
        }
        if(isEmpty(backgroundcolor)){
            fontColor ="#333";
        }
        return "<div style='background-color:"+backgroundcolor+";color:"+fontColor+";text-align:center;'>"+defaultValue+"</div>";

    }

    /***
     * Set 转sql的in，
     * @param set
     * retrun 拼接带括号的in语句
     * **/
    public  static String set2SqlIn(Set set){
        return "( '"+String.join("','",set)+"' )";
    }

    /***
     * list 转sql的in，
     * @param list
     * retrun 拼接带括号的in语句
     * **/
    public  static String list2SqlIn(List<String> list){

        return  "( '"+String.join("','",list)+"' )";

    }



    /**
     * 去除字符串最后一个 rex，同SFDC的removeEnd
     * @param input 需要去除的字符串
     * @param rex 去除标识
     * @return
     */
    public static String removeEnd(String input,String rex){
        String output = "";
        if (input.endsWith(rex)) {
            output = input.substring(0, input.length() - 1);
        } else {
            output = input;
        }
        return output;
    }

    public static boolean compareStrObj(Object va1,Object va2){
            if(str(va1).equals(va2)){
                return true;
            }else{
                return false;
            }
    }

    public void doWork(){

    }

    public static boolean equalsIgnoreCase(String val1,String val2){
        boolean result = false;
        if(val1 !=null && val2!=null){
            return  val1.toLowerCase().equals(val2.toLowerCase());
        }
        return result;
    }
    public static boolean containsIgnoreCase(String val1,String val2){
        boolean result = false;
        if(val1 !=null && val2!=null){
            return  val1.toLowerCase().contains(val2.toLowerCase());
        }
        return result;
    }

    public static Double setScaleTwo(String str){
        try {
            BigDecimal value = new BigDecimal(str);
            BigDecimal roundedValue = value.setScale(2,BigDecimal.ROUND_HALF_UP);
            return roundedValue.doubleValue();
        }catch (Exception e){
            return 0.0;
        }
    }

    public static Double toDouble(Object str){
        try {
            BigDecimal value = new BigDecimal(str(str));
            BigDecimal roundedValue = value.setScale(4,BigDecimal.ROUND_HALF_UP);
            return roundedValue.doubleValue();
        }catch (Exception e){
            return 0.0;
        }
    }


    public static void main(String[] args) {
        System.out.println(str2b(""));
    }

}

/***source_end***/